'use strict';
exports.main = async () => {
  /**
   * 根据搜索记录,设定时间间隔来归纳出热搜数据并存储在热搜表中
   */
  const SEARCHHOT = 'opendb-search-hot'; // 热搜数据库名称
  const SEARCHLOG = 'opendb-search-log'; // 搜索记录数据库名称
  const SEARCHLOG_timeZone = 604800000; // 归纳搜索记录时间间隔，毫秒数，默认为最近7天
  const SEARCHHOT_size = 10; //	热搜条数

  const DB = uniCloud.database();
  const DBCmd = DB.command;
  const $ = DB.command.aggregate;
  const SEARCHHOT_db = DB.collection(SEARCHHOT);
  const SEARCHLOG_db = DB.collection(SEARCHLOG);
  const timeEnd = Date.now() - SEARCHLOG_timeZone;

  let { data: searchHotData } = await SEARCHLOG_db.aggregate()
    .match({
      create_date: DBCmd.gt(timeEnd)
    })
    .group({
      _id: {
        content: '$content'
      },
      count: $.sum(1)
    })
    .replaceRoot({
      newRoot: $.mergeObjects(['$_id', '$$ROOT'])
    })
    .project({
      _id: false
    })
    .sort({
      count: -1
    })
    .end();

  let now = Date.now();
  searchHotData
    .map((item) => {
      item.create_date = now;
      return item;
    })
    .slice(0, SEARCHHOT_size);
  await SEARCHHOT_db.remove();
  // searchHotData = searchHotData.sort((a, b) => b.count - a.count).slice(0, SEARCHHOT_size);
  return searchHotData.length ? await SEARCHHOT_db.add(searchHotData) : '';
};
